<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 闭包记忆化 是为了缓存前面的结果  

        // 函数柯里化目的是为了缓存 第一个参数 让第一个参数生命周期延长 得到复用 

        // 原本一次传递两个参数   变成 两次每次传递一个参数  
        // 这样的话第一个参数提高了复用性  利用闭包 延长了第一个参数的生命周期 


        // 正则验证用户名和密码 

        // function testUserName(str){
        //     return /^[a-zA-Z_\$]\w{5,15}$/.test(str);
        // }

        // function testUserPasswd(str){
        //     return /^\w{6,30}$/.test(str);
        // }


        // function testUserInfo(reg,str){
        //     console.log(reg.test(str));
        // }

        // testUserInfo(/^[a-zA-Z_\$]\w{5,15}$/,'zhangsan666');
        // testUserInfo(/^[a-zA-Z_\$]\w{5,15}$/,'123zhangsan');
        // testUserInfo(/^\w{6,30}$/,'zhang123');
        // testUserInfo(/^\w{6,30}$/,'123');


        // 柯里化 

        // 只写一个函数  一次传一个参数  
        
        // function outer(正则){
        //     let num = 100;
        //     function inner(str){
        //         return num
        //     }
        //     return inner;
        // }

        // outer(正则)(str)

        function testUserInfo(reg){
            return function(str){
                return reg.test(str);
            }
        }
        // testUserInfo(reg)(str);
        const testpwd = testUserInfo(/^\w{6,30}/);
        const testusername = testUserInfo(/^[a-zA-Z_\$]\w{5,15}$/);
        const testuserphone = testUserInfo(/^1[3-9]\d{9}$/);



        console.log(testpwd('asdfasdf123'));
        console.log(testusername('zhangsan666'));
        console.log(testuserphone('13812345678'));

        console.log(testpwd('6666888')); // 不需要重复传递第一个参数了 
        console.log(testpwd('888999'));



    </script>
</body>
</html>